寫了十天,有點基本概念了,今天來寫 Script 吧(終於)。
先隨手抓一個 ShellScript 來看看吧(出處:個人用來抓學校課表的 ShellScript):
#!/bin/bash
TARGET_SEM='1051'
OUTPUT_FILE='unifi.html'
LESSONS='http://aisap.nutc.edu.tw/public/subject_list.js'
LESSON_DETAIL='http://aisap.nutc.edu.tw/public/day/course_list.aspx?sem='"$TARGET_SEM"'&subject='
echo ' ' > $OUTPUT_FILE
curl "$LESSONS" | grep '\_'"$TARGET_SEM"
...
...
...
恩,後面都是 Shell 指令,之前介紹過沒什麼問題,不過第一行是什麼?
#!/bin/bash
一般而言, Shell Script 裡面 #
開頭的表示這行是註解,不會實際執行到。不過第一行的 #!
雖然確實不會執行到,但是卻有很重要的功能:
這會決定接下來這個 Script 要用哪個 Shell 執行,畢竟 Unix Like 下的系統,只要加上執行檔的權限,文字檔都是執行檔。可是要怎麼知道這個是 Ruby 、 Python 還是 Shell 的 Script 呢?再說 Shell 有那麼多種,所以我說到底是哪個 Shell ?
副檔名?那也頂多判斷這是 Ruby
、 Python
還是 Shell
,然而這依然解決不了「該用哪個 Shell 」的問題,所以這個「看起來是註解的 #!
」就很好用啦,後面的 /bin/shell
不就讓電腦知道該怎麼執行這個檔案了嗎 XD
後面是我的習慣,我會習慣把各種參數丟在最前面宣告,這樣要改也很容易(像是明年要用就直接把 1051
改成 1061
),不用找半天我把東西藏在哪。
有些人也會習慣在宣告變數前,紀錄這支 Script 的更新紀錄,但是我實在懶惰,再加上有 git 有 commit log 有 Release Tag,我個人是覺得沒啥必要特別寫 changelog 。
下面就是很普通很普通的 Shell 指令,存成文字檔就是 ShellScript。
不過寫成 Script 跟自己下指令有個很大的差異:你可能會需要使用者回答問題,好讓剩下的步驟可以自動完成。那這該怎麼做呢?
read -p 'enter your tank model:' VAR_YOUR_TANK
插入這個指令, Shell 就會停下來,等使用者輸入內容按下 Enter
後,把他輸入的字串送進 VAR_YOUR_TANK
後,才繼續執行後面的指令。
至於暫停,大部分的指令都是執行完才會繼續下去,但是如果你堅持要他等個 5 秒再繼續,可以用下面的指令:
sleep 5
這樣就算執行完了,依然會等個五秒才繼續執行。
今天就寫到這裡吧,至於你說寫 ShellScript 的工具嘛,目前我自己都是慣用的文字編輯器 vim
而已,沒啥特別的工具,但是怪方法倒是不少,不過寫 ShellScript 的怪方法就等下次吧。
我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。